Android wifi源码分析(二) Wifi关闭流程

本文详细分析了Android WiFi关闭的流程,从WifiController的StaEnabledState状态开始,涉及WifiStateMachine的多个状态转换,包括设置Supplicant运行状态、停止DhcpStateMachine、关闭wpa_supplicant,直至卸载驱动,最终完成WiFi关闭。
摘要由CSDN通过智能技术生成

接着上一篇,这篇说一下Wifi的关闭流程。

由上一篇可以知道,framework层提供的wifi开关接口都是setWifiEnabled,只是参数不同而已。true表示开启wifi、false表示关闭wifi。

Wifi开关在WifiManager和WifiService中的流程一样,接着看WifiController。
wifi开启的时候,WifiController中状态为DeviceActiveState(其父状态为StaEnabledState)。
一下是StaEnabledState对CMD_WIFI_TOGGLED消息的处理。

case CMD_WIFI_TOGGLED:
   if (! mSettingsStore.isWifiToggleEnabled()) {
       if (mSettingsStore.isScanAlwaysAvailable()) {
           transitionTo(mStaDisabledWithScanState);
       } else {
           transitionTo(mApStaDisabledState);
       }
   }
   break;

isWifiToggleEnabled为false表示要关闭wifi,则将状态切换到StaDisabledWithScanState(如果可以一直扫描)或ApStaDisabledState。
我们这里主要看下切换到ApStaDisabledState状态。切换到ApStaDisabledState状态,会先走其enter函数。

class ApStaDisabledState extends State {
   
    private int mDeferredEnableSerialNumber = 0;
    private boolean mHaveDeferredEnable = false;
    private long mDisabledTimestamp;

    @Override
    public void enter() {
        mWifiStateMachine.setSupplicantRunning(false);
        // wpa_supplicant 不能立即重启,所以记录下关闭的时间。
        mDisabledTimestamp = SystemClock.elapsedRealtime();
        mDeferredEnableSerialNumber++
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值